// ============================================================
// ARO Index Worker v2
// Updated: March 19, 2026
// Changes from previous version:
// - [March 19] Table column fonts -> Nunito Sans (biz-name,
// biz-domain, index-pill, aro-score, models-val)
// - [March 19] Audits Run = total count, no environment filter
// ============================================================
const SUBINDUSTRY_THRESHOLD = 10;
const BLOCKED_DOMAINS = [
'builtin.com','builtinboston.com','builtincolorado.com',
'yelp.com','tripadvisor.com','thumbtack.com','angieslist.com',
'angi.com','houzz.com','bbb.org','yellowpages.com',
'mapquest.com','bark.com','homeadvisor.com','clutch.co',
'expertise.com','usnews.com','forbes.com','theknot.com',
'weddingwire.com','apartmentlist.com','zillow.com','realtor.com',
'healthgrades.com','zocdoc.com','avvo.com','findlaw.com','justia.com',
'lawyers.com','redfin.com','trulia.com','webmd.com','mayoclinic.org',
'manta.com','nolo.com','nextdoor.com','trustpilot.com','glassdoor.com',
'indeed.com','wikipedia.org','greatschools.org','niche.com','google.com','facebook.com','instagram.com',
'twitter.com','linkedin.com','youtube.com','tiktok.com','pinterest.com','reddit.com',
'uber.com','fedex.com','ups.com','usps.com',
];
const DIRECTORY_NAME_PATTERNS = [
'top ','best ','the best ','| built in','| yelp',
'you should know','companies to know','agencies in','firms in','services in',
'- angi','- thumbtack','- houzz','find a ','near you',
];
function isBlockedBusiness(domain, businessName) {
const cleanDomain = (domain || '').toLowerCase().replace(/^www\./, '').replace(/^local\./, '');
const cleanName = (businessName || '').toLowerCase();
if (BLOCKED_DOMAINS.some(d => cleanDomain === d || cleanDomain.endsWith('.' + d))) return true;
if (DIRECTORY_NAME_PATTERNS.some(p => cleanName.includes(p))) return true;
return false;
}
const STRIPE_ACTION_PLAN = 'https://buy.stripe.com/cNi5kEdRJ6Bias54zV3sI04';
const AUDIT_URL = 'https://aroindex.com/audit';
const CONTACT_URL = 'https://aroindex.com/agency';
const LOGO_URL = '/assets/aro-badge.png';
const FAVICON_URL = 'https://aroindex.com/favicon.svg';
const PROXY_URL = 'https://tagmakes-proxy.tagmakes.workers.dev';
const PAGES_URL = 'https://aroindex-platform.pages.dev';
const PAGES_PATHS = ['audit','pricing','agency','partners','dashboard','fixes','report','privacy','terms','admin','assets'];
function buildHamburgerNav(activePath) {
const links = [
{ label: 'ARO Index', href: 'https://aroindex.com', path: '/' },
{ label: 'Free Audit', href: 'https://aroindex.com/audit', path: '/audit' },
{ label: 'Pricing', href: 'https://aroindex.com/pricing', path: '/pricing' },
{ label: 'For Agencies', href: 'https://aroindex.com/agency', path: '/agency' },
{ label: 'Affiliate Program', href: 'https://aroindex.com/partners', path: '/partners' },
{ label: 'Agency Console', href: 'https://aroindex.com/console', path: '/console' },
{ label: 'Affiliate Console', href: 'https://aroindex.com/admin/sales', path: '/admin/sales' },
];
let navLinks = '';
links.forEach(function(l) {
const isActive = activePath === l.path;
navLinks += '' + l.label + ' ';
});
return '
' +
'' +
'
' +
'ARO Index ' +
'× ' +
'
' +
navLinks +
'
';
}
function buildHeader() {
return '';
}
export default {
async fetch(request, env) {
const url = new URL(request.url);
const pathParts = url.pathname.split('/').filter(Boolean);
// Favicon
if (url.pathname === '/favicon.ico' || url.pathname === '/favicon.svg') {
const faviconSvg = `ARO ARO ARO `;
return new Response(faviconSvg, { headers: { 'Content-Type': 'image/svg+xml', 'Cache-Control': 'public, max-age=604800' } });
}
// Sitemap (dynamic - pulls markets from category_market_counts, 100+ threshold)
if (url.pathname === '/sitemap.xml') {
try {
const cmcRes = await fetch(
env.SUPABASE_URL + '/rest/v1/category_market_counts?select=service_category,market_slug,business_count&order=market_slug&limit=5000',
{ headers: supaHeaders(env) }
);
const cmcData = await cmcRes.json();
const totals = {};
if (Array.isArray(cmcData)) {
cmcData.forEach(function(r) {
if (!r.market_slug) return;
totals[r.market_slug] = (totals[r.market_slug] || 0) + (r.business_count || 0);
});
}
const dynamicMarkets = Object.keys(totals).filter(function(s) { return s !== 'unknown' && totals[s] >= 90; }).sort();
let xml = '\n\n';
xml += ' https://aroindex.com/ 1.0 \n';
dynamicMarkets.forEach(function(m) { xml += ' https://aroindex.com/' + m + ' 0.9 \n'; });
['audit','pricing','agency','partners','console','privacy','terms'].forEach(function(p) {
xml += ' https://aroindex.com/' + p + ' 0.7 \n';
});
xml += ' ';
return new Response(xml, { headers: { 'Content-Type': 'application/xml; charset=utf-8', 'Cache-Control': 'public, max-age=3600' } });
} catch(e) {
return new Response(' ', { headers: { 'Content-Type': 'application/xml' } });
}
}
// Redirect /partner -> /partners
if (pathParts[0] === 'partner' && pathParts.length === 1) {
return Response.redirect(url.origin + '/partners', 301);
}
// Redirect /dashboard -> /console
if (pathParts[0] === 'dashboard') {
return Response.redirect(url.origin + '/console' + url.search, 301);
}
// /console/reset -> serve password reset page from Pages
if (pathParts[0] === 'console' && pathParts[1] === 'reset') {
const pagesRes = await fetch(PAGES_URL + '/console/reset' + url.search, {
method: request.method,
headers: request.headers,
});
const respHeaders = new Headers(pagesRes.headers);
respHeaders.delete('x-frame-options');
return new Response(pagesRes.body, { status: pagesRes.status, headers: respHeaders });
}
// /console -> serve dashboard page from Pages
if (pathParts[0] === 'console') {
const pagesRes = await fetch(PAGES_URL + '/dashboard' + url.search, {
method: request.method,
headers: request.headers,
});
const respHeaders = new Headers(pagesRes.headers);
respHeaders.delete('x-frame-options');
return new Response(pagesRes.body, { status: pagesRes.status, headers: respHeaders });
}
// Proxy Pages paths to Cloudflare Pages
const firstSegment = pathParts[0] || '';
if (PAGES_PATHS.includes(firstSegment)) {
const pagesRes = await fetch(PAGES_URL + url.pathname + url.search, {
method: request.method,
headers: request.headers,
});
const respHeaders = new Headers(pagesRes.headers);
respHeaders.delete('x-frame-options');
return new Response(pagesRes.body, { status: pagesRes.status, headers: respHeaders });
}
const marketSlug = pathParts[0] || null;
const isLanding = !marketSlug;
const codeParam = url.searchParams.get('agency') || '';
if (pathParts[0] === 'badge-request' && request.method === 'POST') {
return handleBadgeRequest(request, env);
}
let agencyCode = '';
if (codeParam) {
const upper = codeParam.toUpperCase();
try {
const kvRes = await fetch(
PROXY_URL + '/admin/validate-code?code=' + encodeURIComponent(upper),
{ headers: { 'x-internal-secret': env.INTERNAL_SECRET || '' } }
);
if (kvRes.ok) {
const kvData = await kvRes.json();
if (kvData.valid) agencyCode = upper;
}
} catch(e) {}
}
try {
// Parallelize all fetches — nav, audit count, and market data (if not landing)
const fetchPromises = [
fetch(
env.SUPABASE_URL + '/rest/v1/category_market_counts?select=service_category,market_slug,business_count&order=market_slug&limit=5000',
{ headers: supaHeaders(env) }
),
fetch(
env.SUPABASE_URL + '/rest/v1/audits?select=id&limit=1',
{ headers: { 'apikey': env.SUPABASE_ANON_KEY, 'Authorization': 'Bearer ' + env.SUPABASE_ANON_KEY, 'Prefer': 'count=exact' } }
)
];
// Fire market data fetch in parallel if not landing page
if (!isLanding) {
fetchPromises.push(
fetch(
env.SUPABASE_URL + '/rest/v1/leaderboard_display?market_slug=eq.' + marketSlug + '&order=rank.asc&limit=5000',
{ headers: supaHeaders(env) }
)
);
}
const results = await Promise.all(fetchPromises);
const marketsRaw = await results[0].json();
const contentRange = results[1].headers.get('Content-Range') || '';
const auditCount = contentRange.includes('/') ? (parseInt(contentRange.split('/')[1]) || 0) : 0;
if (!Array.isArray(marketsRaw)) {
return errorPage('Database connection failed. Please try again shortly.');
}
// Sum total businesses per market, only show markets with 100+
const marketTotals = {};
marketsRaw.forEach(function(m) {
if (!m.market_slug) return;
marketTotals[m.market_slug] = (marketTotals[m.market_slug] || 0) + (m.business_count || 0);
});
const markets = [...new Map(marketsRaw.map(m => [m.market_slug, {
market_slug: m.market_slug,
market_name: m.market_slug.split('-').map(w => w.charAt(0).toUpperCase() + w.slice(1)).join(' ')
}])).values()]
.filter(function(m) { return m.market_slug && m.market_slug !== 'unknown' && (marketTotals[m.market_slug] || 0) >= 90; });
// Extract unique categories with 10+ businesses (for landing page ticker)
const categoryCounts = {};
marketsRaw.forEach(function(m) {
if (!m.service_category || m.service_category === 'Other') return;
categoryCounts[m.service_category] = (categoryCounts[m.service_category] || 0) + (m.business_count || 0);
});
const categories = Object.keys(categoryCounts).filter(function(c) { return categoryCounts[c] >= 10; }).sort();
if (isLanding) {
return new Response(
renderLandingPage({ markets, auditCount, categories }),
{ headers: { 'Content-Type': 'text/html; charset=utf-8', 'Cache-Control': 'public, max-age=60, s-maxage=300' } }
);
}
const businesses = await results[2].json();
if (!Array.isArray(businesses)) {
return errorPage('Database connection failed. Please try again shortly.');
}
const marketName = (businesses[0] && businesses[0].market_name) ? businesses[0].market_name : marketSlug;
const areaParam = url.searchParams.get('area') || '';
// Extract distinct sub-market slugs
const subMarketCounts = {};
businesses.forEach(function(b) {
if (!b.sub_market_slug) return;
if ((b.models_total || 0) < 3) return;
subMarketCounts[b.sub_market_slug] = (subMarketCounts[b.sub_market_slug] || 0) + 1;
});
const subMarkets = Object.keys(subMarketCounts).filter(function(sm) {
return subMarketCounts[sm] >= 50;
}).sort();
// Filter by city_slug to isolate market-level vs sub-market rows
const filteredBusinesses = areaParam
? businesses.filter(b => b.city_slug === areaParam)
: businesses.filter(b => b.city_slug === marketSlug);
const displayName = areaParam
? areaParam.split('-').map(w => w.charAt(0).toUpperCase() + w.slice(1)).join(' ')
: marketName;
const industryMap = buildIndustryMap(filteredBusinesses, !!areaParam);
return new Response(
renderPage({ marketName: displayName, marketSlug, industryMap, markets, agencyCode, auditCount, subMarkets, areaParam, parentMarketName: marketName, allFilteredBusinesses: areaParam ? filteredBusinesses : null }),
{ headers: { 'Content-Type': 'text/html; charset=utf-8', 'Cache-Control': 'public, max-age=60, s-maxage=300' } }
);
} catch(err) {
return errorPage('Something went wrong: ' + err.message);
}
}
};
async function handleBadgeRequest(request, env) {
let body = {};
try { body = await request.json(); } catch(e) { return jsonResponse({ error: 'Invalid JSON' }, 400); }
const email = (body.email || '').trim().toLowerCase();
const domain = (body.domain || '').trim();
const bizName = (body.business_name || '').trim();
const category = (body.category || '').trim();
const score = body.aro_score || null;
if (!email || !domain) return jsonResponse({ error: 'email and domain required' }, 400);
try {
const darkSnippet = ' ';
const lightSnippet = ' ';
const html = buildBadgeEmail({ bizName, category, score, domain, darkSnippet, lightSnippet });
const resendRes = await fetch('https://api.resend.com/emails', {
method: 'POST',
headers: { 'Authorization': 'Bearer ' + env.RESEND_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({
from: 'TaG Makes ',
to: email,
subject: (bizName || domain) + ' made the ARO Index Top 10',
html
})
});
if (!resendRes.ok) {
const err = await resendRes.text();
return jsonResponse({ error: 'Email failed: ' + err }, 500);
}
if (env.SUPABASE_URL && env.SUPABASE_ANON_KEY) {
try {
await fetch(
env.SUPABASE_URL + '/rest/v1/projects?domain=eq.' + encodeURIComponent(domain),
{
method: 'PATCH',
headers: { ...supaHeaders(env), 'Prefer': 'return=minimal' },
body: JSON.stringify({
contact_email: email,
badge_email_sent: true,
badge_email_status: 'sent',
badge_email_sent_at: new Date().toISOString(),
top10_notification_sent: true
})
}
);
} catch(e) {}
}
return jsonResponse({ ok: true });
} catch(e) {
return jsonResponse({ error: e.message }, 500);
}
}
function jsonResponse(body, status) {
return new Response(JSON.stringify(body), {
status: status || 200,
headers: { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*' }
});
}
function supaHeaders(env) {
return {
'apikey': env.SUPABASE_ANON_KEY,
'Authorization': 'Bearer ' + env.SUPABASE_ANON_KEY,
'Content-Type': 'application/json'
};
}
function buildIndustryMap(businesses, isSubMarket) {
const INDUSTRY_MIN = isSubMarket ? 3 : 10;
const seen = new Set();
const deduped = businesses.slice().sort(function(a,b){ return (b.ranking_score||0)-(a.ranking_score||0); }).filter(function(b) {
const key = b.project_id + '|' + b.service_category;
if (seen.has(key)) return false;
seen.add(key);
return true;
});
const raw = {};
deduped.forEach(function(b) {
const domain = (b.primary_domain || '').toLowerCase();
if (domain.includes('tagmakessc') || domain.includes('tagmakes')) return;
if (isBlockedBusiness(b.primary_domain, b.business_name)) return;
const industry = b.service_category || 'Other';
const sub = b.subindustry || null;
if (!raw[industry]) raw[industry] = { businesses: [], subindustries: {} };
raw[industry].businesses.push(b);
if (sub) {
if (!raw[industry].subindustries[sub]) raw[industry].subindustries[sub] = [];
raw[industry].subindustries[sub].push(b);
}
});
const map = {};
Object.keys(raw).forEach(function(ind) {
if (raw[ind].businesses.length >= INDUSTRY_MIN) map[ind] = raw[ind];
});
return map;
}
function errorPage(msg) {
return new Response(
'ARO Index ' +
'' +
'' +
'',
{ headers: { 'Content-Type': 'text/html' } }
);
}
function esc(str) {
return String(str)
.replace(/&/g, '&')
.replace(//g, '>')
.replace(/"/g, '"');
}
function buildBadgeEmail({ bizName, category, score, domain, darkSnippet, lightSnippet }) {
return ' ' +
'' +
'' +
'' +
'' +
'ARO™ Index ' +
'Top 10 Badge ' +
' ' +
'' +
'You made the list
' +
'' + esc(bizName || domain) + ' ranks in the Top 10 for ' + esc(category) + ' on the ARO Index. ' +
(score ? 'Your ARO Score of ' + score + ' puts you in the top tier of AI-recommended businesses in your category.
' : '') +
'Two badge options below. Pick whichever fits your site and paste the code anywhere.
' +
'Dark version
' +
'' + darkSnippet + '
' +
'' + esc(darkSnippet) + ' ' +
'Light version
' +
'' + lightSnippet + '
' +
'' + esc(lightSnippet) + ' ' +
'Questions? Reply here or reach me at therese@tagmakessc.com .
' +
' ' +
'' +
'Therese Grittner · TaG Makes · Charleston, SC · tagmakessc.com
' +
' ' +
'
';
}
function renderLandingPage(opts) {
const markets = opts.markets;
let marketPills = '';
markets.forEach(function(m) {
marketPills += '' + esc(m.market_name) + ' ';
});
let cityLinks = '';
markets.forEach(function(m) {
cityLinks += '' + esc(m.market_name) + ' ';
});
return '\n\n\n' +
' \n' +
' \n' +
' \n' +
' \n' +
' \n' +
'ARO Index | AI Recommendation Rankings by Market \n' +
' \n' +
' \n' +
' \n' +
'\n' +
'\n' +
'\n' +
'\n' +
'\n' +
'\n' +
'\n' +
'\n' +
'\n\n' +
buildHamburgerNav('/') +
buildHeader() +
'\n' +
'
\n' +
'
AI Recommendation Rankings
\n' +
'
Which businesses areAI recommending today? \n' +
'
Real audit data showing which businesses AI platforms recommend, by market and industry. Built from live queries across ChatGPT, Claude, Gemini, and Perplexity.
\n' +
'
Search your business or run an audit.
\n' +
'
\n' +
// Search bar
'
\n' +
'
Search for your business \n' +
'
\n' +
' \n' +
'Check \n' +
'
\n' +
'
If you\'re not here, AI isn\'t recommending you.
\n' +
'
\n' +
'
\n' +
// Cities section
'
\n' +
'
Live ARO Index data - new cities added weekly
\n' +
'
' + cityLinks + '
\n' +
'
\n' +
// Industry ticker
'
\n' +
'
Industries tracked - new markets added weekly
\n' +
(function() {
var cats = opts.categories || [];
if (cats.length === 0) cats = ['Restaurant','Real Estate','Healthcare','Home Services','Law Firm','Financial Services'];
var tickerItems = '';
// Double the list for seamless loop
var doubled = cats.concat(cats);
doubled.forEach(function(c) { tickerItems += '
' + esc(c) + ' '; });
return '
\n' +
'
\n' + tickerItems + '
\n
\n
\n';
})() +
'
\n' +
'
\n' +
'
For business owners
\n' +
'
Find out if AI is recommending you \n' +
'
Free audit across ChatGPT, Claude, Gemini, and Perplexity. See your score in 60 seconds.
\n' +
'
Run free audit \n' +
'
\n' +
'
\n' +
'
For agencies
\n' +
'
White-label AI recommendation data your clients think you built \n' +
'
Give every client a competitive ranking they can\'t get anywhere else. Your brand. Your margin. Our data.
\n' +
'
See how it works \n' +
'
\n' +
'
\n' +
'
\n' +
'
What the ARO™ Index actually is \n' +
'
When someone asks an AI platform to recommend a business, most are invisible. The ARO Index measures who shows up and why.
\n' +
'
Built from live audits across ChatGPT, Claude, Gemini, and Perplexity. Scored using the ARO Score™ methodology. Ranked by how consistently and confidently AI platforms recommend each business.
\n' +
'
This is research data. Rankings reflect current AI recommendation patterns and update as new audits run.
\n' +
'
\n' +
'
\n' +
'
ARO Score
Measures how well a single website is structured to be recommended by AI. Entity clarity, schema markup, topical authority. A diagnostic score.
\n' +
'
ARO Index Score
Measures a business competitively within its category. Weighted by recommendation rate, model agreement, and audit recency.
\n' +
'
AIs Agree
How many AI platforms recommended this business for the tested query. Agreement across more platforms means a stronger, more reliable ranking.
\n' +
'
Why rankings change
AI models update regularly. A business that was invisible six months ago can rank highly today after optimizing for AI recommendation signals.
\n' +
'
\n' +
'
\n' +
'\n' +
// Glitch modal
'' +
'
' +
'
ARO Index
' +
'
Loading
' +
'
analyzing . . .
' +
'
\n' +
'\n' +
'\n';
}
function renderPage(opts) {
const marketName = opts.marketName;
const marketSlug = opts.marketSlug;
const industryMap = opts.industryMap;
const markets = opts.markets;
const agencyCode = opts.agencyCode;
const auditCount = opts.auditCount || 0;
const subMarkets = opts.subMarkets || [];
const areaParam = opts.areaParam || '';
const parentMarketName = opts.parentMarketName || marketName;
const allFilteredBusinesses = opts.allFilteredBusinesses || null;
const industries = Object.keys(industryMap).sort();
const totalBusinesses = Object.values(industryMap).reduce(function(a, i) { return a + i.businesses.length; }, 0);
const totalCategories = industries.length;
const allDataJson = JSON.stringify(
industries.reduce(function(acc, ind) { acc[ind] = industryMap[ind].businesses; return acc; }, {})
);
const subDataJson = JSON.stringify(
industries.reduce(function(acc, ind) { acc[ind] = industryMap[ind].subindustries; return acc; }, {})
);
const marketNameJs = marketName.replace(/\\/g, '\\\\').replace(/'/g, "\\'").replace(/\r?\n/g, ' ');
const marketNameLowerJs = marketName.toLowerCase().replace(/\\/g, '\\\\').replace(/'/g, "\\'").replace(/\r?\n/g, ' ');
const agencyCodeJs = agencyCode.replace(/'/g, "\\'");
const agencyUnlockedBool = agencyCode ? 'true' : 'false';
const schemaDate = new Date().toISOString().split('T')[0];
let marketPills = '';
markets.forEach(function(m) {
const active = m.market_slug === marketSlug ? ' active' : '';
marketPills += '' + esc(m.market_name) + ' ';
});
let agencyCatOptions = '';
industries.forEach(function(ind) {
agencyCatOptions += '' + esc(ind) + ' ';
});
const faqs = [
['What is the ARO Index?', 'The ARO Index is a ranked dataset of businesses scored on how consistently and confidently AI platforms recommend them. It measures recommendation rate across major AI platforms, model agreement, score strength, and audit recency -- then weights them into a single Index Score. Think of it like a credit bureau for AI recommendations. Your score reflects how the machines see you, not how you see yourself.'],
['What is an ARO Score?', 'The ARO Score measures how well a single website is structured to be recommended by AI platforms. It evaluates entity clarity, topical authority, schema markup, content structure, and crawlability -- the signals AI uses to decide who to recommend. A high ARO Score means the machines understand you. A low score means they are guessing, and when AI guesses, it recommends someone else.'],
['Why does my Index Score differ from my ARO Score?', 'Your ARO Score measures your site in isolation. Your Index Score measures you against every other business in your category. A business recommended by all AI models ranks higher than one with a better raw score but fewer model recommendations. The Index Score is competitive. The ARO Score is diagnostic.'],
['How often are rankings updated?', 'Rankings update in real time as new audits complete. Every audit run adds to the dataset. The more businesses audited in a category, the more accurate and competitive the index becomes. Early movers have a significant advantage -- they set the benchmark everyone else is measured against.'],
['Why does AI recommend different businesses than Google?', 'Google rewards links, keywords, and click signals. AI platforms reward clarity, entity recognition, and structured data. A business can rank on page one of Google and be completely invisible inside AI recommendations -- because the signals are fundamentally different.'],
['How is the Index Score calculated?', 'The Index Score combines three weighted factors: ARO Score (70%), AI model recommendation rate (20%), and audit recency (10%). A business audited recently and recommended by all AI models will outrank one with a higher raw score but older data.'],
['How can agencies use this data?', 'The ARO Index gives agencies a real competitive benchmark to show clients -- not vanity metrics, but actual AI recommendation data. Agency access unlocks query-level detail, client filtering, and audit history. Enter your access code above or get in touch to learn about agency partnerships.']
];
let faqHtml = '';
faqs.forEach(function(item, i) {
faqHtml += '';
faqHtml += '
' + esc(item[0]) + '+ ';
faqHtml += '
';
faqHtml += '
';
});
const schemaFaqEntities = faqs.map(function(item) {
return '{"@type":"Question","name":' + JSON.stringify(item[0]) + ',"acceptedAnswer":{"@type":"Answer","text":' + JSON.stringify(item[1]) + '}}';
}).join(',');
const schemaJson = '{"@context":"https://schema.org","@graph":[' +
'{"@type":"Dataset","name":' + JSON.stringify('ARO Index - ' + marketName) + ',' +
'"description":' + JSON.stringify('AI recommendation rankings for ' + marketName + ' businesses across ChatGPT, Claude, Gemini, and Perplexity. Powered by ARO Score methodology by TaG Makes.') + ',' +
'"url":"https://aroindex.com/' + esc(marketSlug) + '",' +
'"creator":{"@type":"Organization","name":"TaG Makes","url":"https://tagmakessc.com"},' +
'"dateModified":"' + schemaDate + '"},' +
'{"@type":"Organization","name":"TaG Makes","url":"https://tagmakessc.com",' +
'"founder":{"@type":"Person","name":"Therese Grittner"},' +
'"description":"Creators of the ARO Score methodology. AI Recommendation Optimization consultancy based in Charleston, SC."},' +
'{"@type":"FAQPage","mainEntity":[' + schemaFaqEntities + ']}]}';
const inlineJs = [
'(function(){',
'var allData=' + allDataJson + ';',
'var subData=' + subDataJson + ';',
'var activeIndustry=null;',
'var activeSubindustry=null;',
'var agencyUnlocked=' + agencyUnlockedBool + ';',
'var currentAgencyCode=\'' + agencyCodeJs + '\';',
'var THRESHOLD=' + SUBINDUSTRY_THRESHOLD + ';',
'var MARKET_NAME=\'' + marketNameJs + '\';',
'var MARKET_NAME_LOWER=\'' + marketNameLowerJs + '\';',
'var AUDIT_URL=\'' + AUDIT_URL + '\';',
'var CONTACT_URL=\'' + CONTACT_URL + '\';',
'var INDEX_URL="https://aroindex.com";',
'var MARKET_SLUG="' + marketSlug.replace(/"/g, '') + '";',
'var glitchTimer=null;',
'document.querySelectorAll(".stat-cell[data-tip]").forEach(function(cell){',
' cell.addEventListener("mouseenter",function(){',
' var tip=document.createElement("div");tip.className="stat-tip";',
' tip.textContent=cell.getAttribute("data-tip");cell.appendChild(tip);',
' setTimeout(function(){tip.classList.add("visible");},10);',
' });',
' cell.addEventListener("mouseleave",function(){',
' var tip=cell.querySelector(".stat-tip");if(tip)tip.remove();',
' });',
'});',
'function showGlitch(label){',
' var modal=document.getElementById("glitch-modal");',
' var labelEl=document.getElementById("glitch-label");',
' labelEl.textContent=label||"Loading";',
' if(glitchTimer){clearTimeout(glitchTimer);glitchTimer=null;}',
' modal.classList.remove("fading");modal.classList.add("visible");',
'}',
'function hideGlitch(){',
' var modal=document.getElementById("glitch-modal");',
' modal.classList.add("fading");',
' glitchTimer=setTimeout(function(){modal.classList.remove("visible","fading");},300);',
'}',
'var cmdInput=document.getElementById("cmdInput");',
'var cmdDropdown=document.getElementById("cmdDropdown");',
'var cmdActive=document.getElementById("cmdActive");',
'var cmdActiveText=document.getElementById("cmdActiveText");',
'var cmdHlIndex=-1;',
'var industryNames=Object.keys(allData).sort();',
'var industryCounts={};',
'industryNames.forEach(function(n){industryCounts[n]=(allData[n]||[]).length;});',
'function renderCmdDropdown(q){',
' cmdDropdown.innerHTML="";cmdHlIndex=-1;',
' var filtered=industryNames;',
' if(q){var ql=q.toLowerCase();filtered=industryNames.filter(function(n){return n.toLowerCase().indexOf(ql)!==-1;});}',
' if(filtered.length===0){cmdDropdown.innerHTML="no match
";return;}',
' filtered.forEach(function(n){',
' var div=document.createElement("div");div.className="cmd-dropdown-item";div.dataset.industry=n;',
' div.innerHTML=""+escH(n)+" "+(industryCounts[n]||0)+" ";',
' div.addEventListener("click",function(){pickIndustry(n);});',
' cmdDropdown.appendChild(div);',
' });',
'}',
'function pickIndustry(ind){',
' cmdInput.value="";cmdDropdown.classList.remove("open");cmdInput.blur();',
' cmdActiveText.textContent=ind;cmdActive.classList.add("show");',
' showGlitch(ind);',
' setTimeout(function(){selectIndustry(ind);hideGlitch();},900);',
'}',
'cmdInput.addEventListener("focus",function(){renderCmdDropdown("");cmdDropdown.classList.add("open");});',
'cmdInput.addEventListener("input",function(){renderCmdDropdown(cmdInput.value.trim());cmdDropdown.classList.add("open");});',
'cmdInput.addEventListener("keydown",function(e){',
' var items=cmdDropdown.querySelectorAll(".cmd-dropdown-item");',
' if(!items.length)return;',
' if(e.key==="ArrowDown"){e.preventDefault();cmdHlIndex=Math.min(cmdHlIndex+1,items.length-1);updateCmdHl(items);}',
' else if(e.key==="ArrowUp"){e.preventDefault();cmdHlIndex=Math.max(cmdHlIndex-1,0);updateCmdHl(items);}',
' else if(e.key==="Enter"){e.preventDefault();if(cmdHlIndex>=0&&items[cmdHlIndex])pickIndustry(items[cmdHlIndex].dataset.industry);}',
' else if(e.key==="Escape"){cmdDropdown.classList.remove("open");cmdInput.blur();}',
'});',
'function updateCmdHl(items){items.forEach(function(el,i){el.classList.toggle("hl",i===cmdHlIndex);});if(cmdHlIndex>=0&&items[cmdHlIndex])items[cmdHlIndex].scrollIntoView({block:"nearest"});}',
'document.addEventListener("click",function(e){if(!document.getElementById("cmdSelect").contains(e.target))cmdDropdown.classList.remove("open");});',
'cmdActive.addEventListener("click",function(){',
' cmdActive.classList.remove("show");activeIndustry=null;activeSubindustry=null;',
' document.getElementById("lbSection").style.display="none";',
' document.getElementById("agencyHook").style.display="none";',
' document.getElementById("howOneLiner").style.display="none";',
' document.getElementById("subPillsWrap").style.display="none";',
' document.getElementById("proofPanel").style.display="none";',
' var ss=document.getElementById("sideSubs");if(ss)ss.remove();',
' document.querySelectorAll(".side-nav-industry").forEach(function(el){el.classList.remove("active");});',
'});',
'function selectIndustry(ind){',
' activeIndustry=ind;activeSubindustry=null;',
' cmdActiveText.textContent=ind;cmdActive.classList.add("show");',
' renderSubPills(ind);renderTable(ind,null);',
' document.getElementById("lbSection").style.display="block";',
' document.getElementById("agencyHook").style.display="block";',
' document.getElementById("howOneLiner").style.display="block";',
' document.getElementById("lbTitle").textContent="Top AI Recommended - "+ind;',
'}',
'function renderSubPills(ind){',
' var subs=subData[ind]||{};',
' var eligible=Object.keys(subs).filter(function(s){return Array.isArray(subs[s])&&subs[s].length>=THRESHOLD;});',
' var wrap=document.getElementById("subPillsWrap");',
' var container=document.getElementById("subPills");',
' container.innerHTML="";',
' if(eligible.length===0){wrap.style.display="none";return;}',
' wrap.style.display="block";',
' var allBtn=document.createElement("button");',
' allBtn.className="pill sub active";allBtn.textContent="All";',
' allBtn.addEventListener("click",function(){showGlitch(ind);setTimeout(function(){selectSub(null);hideGlitch();},900);});',
' container.appendChild(allBtn);',
' eligible.forEach(function(s){',
' var btn=document.createElement("button");',
' btn.className="pill sub";btn.textContent=s;btn.dataset.sub=s;',
' btn.addEventListener("click",function(){showGlitch(s);setTimeout(function(){selectSub(s);hideGlitch();},900);});',
' container.appendChild(btn);',
' });',
' // Sidebar subindustry branch — inject under active industry item',
' var oldSubsWrap=document.getElementById("sideSubs");',
' if(oldSubsWrap)oldSubsWrap.remove();',
' var activeItem=document.querySelector(".side-nav-industry.active");',
' if(activeItem&&eligible.length>0){',
' var subsWrap=document.createElement("div");',
' subsWrap.id="sideSubs";',
' eligible.forEach(function(s){',
' var a=document.createElement("a");',
' a.className="side-nav-sub";',
' a.href="#";',
' a.innerHTML="→ "+s;',
' a.addEventListener("click",function(e){',
' e.preventDefault();',
' document.querySelectorAll(".side-nav-sub").forEach(function(el){el.classList.remove("active");});',
' a.classList.add("active");',
' selectSub(s);',
' });',
' subsWrap.appendChild(a);',
' });',
' activeItem.parentNode.insertBefore(subsWrap,activeItem.nextSibling);',
' }',
'}',
'function selectSub(sub){',
' activeSubindustry=sub;',
' document.querySelectorAll("#subPills .pill").forEach(function(p){',
' p.classList.toggle("active",(p.dataset.sub||null)===sub);',
' });',
' renderTable(activeIndustry,sub);',
'}',
'function renderGate(count){',
' var wrap=document.getElementById("gateWrap");',
' if(!wrap)return;',
' wrap.innerHTML=',
' \'\'+',
' \'
Want to see more?
\'+',
' \'
Get the full rankings and market insights delivered to your inbox.
\'+',
' \'
\'+',
' \'
\'+',
' \'I am a business owner \'+',
' \'I am an agency \'+',
' \'
\'+',
' \'
\'+',
' \'
\';',
'}',
'window.submitGate=async function submitGate(type){',
' var email=(document.getElementById("gateEmail").value||"").trim().toLowerCase();',
' var errEl=document.getElementById("gateError");',
' errEl.textContent="";',
' if(!email||!email.includes("@")){errEl.textContent="Please enter a valid email address.";return;}',
' document.querySelectorAll(".gate-btn").forEach(function(b){b.disabled=true;b.textContent="Saving...";});',
' try{',
' await fetch("' + PROXY_URL + '/capture-lead",{',
' method:"POST",',
' headers:{"Content-Type":"application/json"},',
' body:JSON.stringify({contact_email:email,lead_status:type==="agency"?"agency_capture":"owner_capture",category:activeIndustry||"",city:MARKET_NAME,status:"pending",notes:"leaderboard_gate"})',
' });',
' }catch(e){console.warn("Lead capture failed:",e.message);}',
' var gate=document.getElementById("leaderboard-gate");',
' if(gate)gate.remove();',
' var tbody=document.getElementById("lbBody");',
' (window._hiddenRows||[]).forEach(function(row){tbody.appendChild(buildRow(row,false,false,activeIndustry));});',
' if(type==="agency"){',
' var nudge=document.createElement("tr");',
' nudge.innerHTML=\'Want these rankings for your clients? See agency plans \';',
' tbody.appendChild(nudge);',
' }',
'}',
'function renderTable(ind,sub){',
' var sortKey=agencyUnlocked?(document.getElementById("agSortFilter").value||"ranking_score"):"ranking_score";',
' var rows=sub?(subData[ind]&&subData[ind][sub]?subData[ind][sub]:[]):(allData[ind]||[]);',
' rows=rows.slice().sort(function(a,b){',
' if(sortKey==="last_audit_date")return new Date(b.last_audit_date||0)-new Date(a.last_audit_date||0);',
' return(b[sortKey]||0)-(a[sortKey]||0);',
' });',
' var top30=rows.slice(0,30);',
' var visible=top30.slice(0,10);',
' var hidden=top30.slice(10);',
' var tbody=document.getElementById("lbBody");',
' tbody.innerHTML="";',
' if(visible.length===0){',
' var emptyRow=document.createElement("tr");',
' var emptyTd=document.createElement("td");',
' emptyTd.colSpan=agencyUnlocked?6:5;emptyTd.className="empty-state";',
' emptyTd.innerHTML="AI isn\'t sending customers to businesses in "+escH(ind||"")+" "+escH(MARKET_NAME)+" yet. That usually means AI doesn\'t understand what these businesses do, or it prefers a competitor. Run a report to see which. ";',
' emptyRow.appendChild(emptyTd);tbody.appendChild(emptyRow);return;',
' }',
' var labelRow=document.createElement("tr");',
' var labelTd=document.createElement("td");',
' labelTd.colSpan=agencyUnlocked?6:5;labelTd.className="top10-label";',
' labelTd.textContent="Top 10 - "+(sub||ind);',
' labelRow.appendChild(labelTd);tbody.appendChild(labelRow);',
' visible.forEach(function(b,idx){tbody.appendChild(buildRow(b,false,idx===0,ind));});',
' if(agencyUnlocked||hidden.length===0){',
' hidden.forEach(function(b){tbody.appendChild(buildRow(b,false,false,ind));});',
' }else{',
' window._hiddenRows=hidden;',
' var gateRow=document.createElement("tr");',
' gateRow.id="leaderboard-gate";',
' gateRow.innerHTML=\'
\';',
' tbody.appendChild(gateRow);',
' renderGate(hidden.length);',
' }',
' if(window._searchDomain){maybeShowOutsideRow(rows,tbody);}',
' updateProofPanel(rows,ind);',
'}',
'function updateProofPanel(rows,ind){',
' var panel=document.getElementById("proofPanel");',
' if(!panel)return;',
' if(!rows||rows.length===0){panel.style.display="none";return;}',
' var proof=null;',
' for(var i=0;i\'+' +
' \'Real data from this market
\'+' +
' \'\'+' +
' \'AI selected: \'+escH(proof.business_name)+\' \'+' +
' \'Customer type: \'+escH(custType)+\' \'+' +
' \'Recommended by: \'+(proof.models_recommending||0)+\' of \'+(proof.models_total||4)+\' AI platforms \'+' +
' \'ARO Score: \'+(proof.aro_score||0)+\' \'+' +
' \'
\'+' +
' \'Seen across ChatGPT, Claude, Gemini, and Perplexity.
\'+' +
' \'\';',
' panel.style.display="block";',
'}',
'function buildRow(b,highlight,isRankOne,ind){',
' var tr=document.createElement("tr");',
' tr.className="fade-in"+(highlight?" highlighted":"")+(isRankOne?" rank-one-row":"");',
' tr.dataset.domain=b.primary_domain||"";',
' var modRec=typeof b.models_recommending==="number"?b.models_recommending:0;',
' var modTotal=(b.models_total&&typeof b.models_total==="number")?b.models_total:4;',
' var isFull=modRec===modTotal;',
' var bizTd=document.createElement("td");',
' var badgeHtml="";',
' if(isRankOne&&b.rank<=10){',
' badgeHtml="";',
' badgeHtml+="
Do you have your ARO Badge? ";',
' badgeHtml+="
";',
' badgeHtml+="Yes, I have it ";',
' badgeHtml+=" No, send it to me ";',
' badgeHtml+="
";',
' }',
' bizTd.innerHTML=""+escH(b.business_name||"")+" "+escH(b.primary_domain||"")+" "+badgeHtml;',
' tr.appendChild(bizTd);',
' var rankTd=document.createElement("td");',
' rankTd.innerHTML=""+(Math.round((b.ranking_score||0)*10)/10)+" ";',
' tr.appendChild(rankTd);',
' var aroTd=document.createElement("td");',
' aroTd.innerHTML=""+(b.aro_score||0)+" ";',
' tr.appendChild(aroTd);',
' var modelTd=document.createElement("td");',
' modelTd.innerHTML=""+(modRec)+" of "+modTotal+" ";',
' tr.appendChild(modelTd);',
' var ctaTd=document.createElement("td");',
' ctaTd.innerHTML="See full breakdown ";',
' tr.appendChild(ctaTd);',
' if(agencyUnlocked){',
' var queryTd=document.createElement("td");',
' queryTd.innerHTML=""+escH((b.service_category||"").toLowerCase())+" "+escH(MARKET_NAME_LOWER)+" ";',
' tr.appendChild(queryTd);',
' }',
' return tr;',
'}',
'function handleBadgeYes(){',
' var prompt=document.getElementById("badgePrompt");',
' if(prompt)prompt.innerHTML="Nice. You\'re all set. 🏆 ";',
'}',
'function handleBadgeNo(bizName,domain,category,score){',
' var prompt=document.getElementById("badgePrompt");',
' if(!prompt)return;',
' prompt.innerHTML="Send my badge
";',
' setTimeout(function(){var el=document.getElementById("badgeEmail");if(el)el.focus();},50);',
'}',
'function submitBadge(bizName,domain,category,score){',
' var emailEl=document.getElementById("badgeEmail");',
' if(!emailEl)return;',
' var email=emailEl.value.trim();',
' if(!email||!email.includes("@")){emailEl.style.borderColor="var(--pink)";return;}',
' var prompt=document.getElementById("badgePrompt");',
' if(prompt)prompt.innerHTML="Sending your badge... ";',
' fetch(INDEX_URL+"/badge-request",{',
' method:"POST",',
' headers:{"Content-Type":"application/json"},',
' body:JSON.stringify({email:email,domain:domain,business_name:bizName,category:category,aro_score:score})',
' }).then(function(r){return r.json();}).then(function(d){',
' if(prompt){',
' if(d.ok){prompt.innerHTML="Badge sent! Check your inbox. 🏆 ";}',
' else{prompt.innerHTML="Something went wrong. Email therese@tagmakessc.com ";}',
' }',
' }).catch(function(){',
' if(prompt)prompt.innerHTML="Something went wrong. Email therese@tagmakessc.com ";',
' });',
'}',
'function maybeShowOutsideRow(allRows,tbody){',
' var domain=window._searchDomain;if(!domain)return;',
' var inTop10=allRows.slice(0,10).some(function(b){return(b.primary_domain||"").toLowerCase().includes(domain);});',
' if(inTop10)return;',
' var match=null;var pos=0;',
' allRows.forEach(function(b,i){if(!match&&((b.primary_domain||"").toLowerCase().includes(domain)||(b.business_name||"").toLowerCase().includes(domain))){match=b;pos=i+1;}});',
' if(!match)return;',
' var sepRow=document.createElement("tr");var sepTd=document.createElement("td");',
' sepTd.colSpan=agencyUnlocked?6:5;sepTd.className="outside-label";',
' sepTd.textContent="Your business - ranked #"+pos+" in this category";',
' sepRow.appendChild(sepTd);tbody.appendChild(sepRow);',
' tbody.appendChild(buildRow(match,true,false,""));',
'}',
'function handleSearch(){',
' var result=document.getElementById("searchResult");result.className="search-result";result.innerHTML="";',
' var raw=document.getElementById("searchInput").value.trim().toLowerCase().replace(/^https?:\\/\\//,"").replace(/\\/$/,"");',
' if(!raw)return;',
' showGlitch("Searching...");window._searchDomain=raw;',
' setTimeout(function(){',
' var found=null;var foundInd=null;var foundPos=null;',
' Object.keys(allData).forEach(function(ind){',
' if(found)return;',
' var sorted=allData[ind].slice().sort(function(a,b){return(b.ranking_score||0)-(a.ranking_score||0);});',
' sorted.forEach(function(b,i){if(!found&&((b.primary_domain||"").toLowerCase().includes(raw)||(b.business_name||"").toLowerCase().includes(raw))){found=b;foundInd=ind;foundPos=i+1;}});',
' });',
' hideGlitch();',
' setTimeout(function(){',
' result.className="search-result show";',
' if(!found){',
' showOpportunityPopup(escH(raw), escH(MARKET_NAME));',
' return;',
' }',
' var inTop10=foundPos<=10;',
' var subSlug=found.sub_market_slug||"";',
' var subName=subSlug?subSlug.split("-").map(function(w){return w.charAt(0).toUpperCase()+w.slice(1);}).join(" "):"";',
' var line1="Ranked #"+foundPos+" in "+escH(foundInd)+" "+(subName?" - "+escH(subName):"")+""+(inTop10?" | In Top 10 ":"");',
' var line2="";',
' if(subSlug){',
' line1+=" View in "+escH(subName)+" \\u2192 ";',
' line2="";',
' }',
' var viewLink="View "+escH(found.business_name||found.primary_domain||"")+" in "+escH(foundInd)+" \\u2192 ";',
' result.innerHTML=""+escH(found.business_name||"")+" "+escH(found.primary_domain||"")+" "+line1+"
"+line2+viewLink+"
";',
' selectIndustry(foundInd);',
' if(!inTop10){setTimeout(function(){var sorted=allData[foundInd].slice().sort(function(a,b){return(b.ranking_score||0)-(a.ranking_score||0);});maybeShowOutsideRow(sorted,document.getElementById("lbBody"));},150);}',
' },350);',
' },800);',
'}',
'document.getElementById("searchBtn").addEventListener("click",handleSearch);',
'document.getElementById("searchInput").addEventListener("keydown",function(e){if(e.key==="Enter")handleSearch();});',
'document.getElementById("searchInput").addEventListener("input",function(){if(!this.value.trim()){var r=document.getElementById("searchResult");r.className="search-result";r.innerHTML="";window._searchDomain=null;}});',
'document.getElementById("agencyHeader").addEventListener("click",function(){',
' var body=document.getElementById("agencyBody");',
' var chevron=document.getElementById("agencyChevron");',
' var header=document.getElementById("agencyHeader");',
' var isOpen=body.classList.contains("open");',
' body.classList.toggle("open",!isOpen);chevron.classList.toggle("open",!isOpen);header.classList.toggle("open",!isOpen);',
'});',
'document.getElementById("submitCodeBtn").addEventListener("click",function(){',
' var code=document.getElementById("codeInput").value.trim().toUpperCase();',
' var errEl=document.getElementById("codeError");',
' errEl.classList.remove("show");',
' fetch("' + PROXY_URL + '/admin/validate-code?code="+encodeURIComponent(code))',
' .then(function(r){return r.json();})',
' .then(function(d){',
' if(d.valid){',
' agencyUnlocked=true;currentAgencyCode=code;',
' document.getElementById("lockIcon").textContent="\\u2713";',
' document.getElementById("lockIcon").classList.add("unlocked");',
' document.getElementById("agencyFilters").classList.add("show");',
' document.getElementById("queryColHead").style.display="table-cell";',
' document.getElementById("codeSection").style.display="none";',
' document.getElementById("agencyHook").style.display="none";',
' if(activeIndustry)renderTable(activeIndustry,activeSubindustry);',
' } else {',
' errEl.classList.add("show");',
' }',
' }).catch(function(){errEl.classList.add("show");});',
'});',
'document.getElementById("codeInput").addEventListener("keydown",function(e){if(e.key==="Enter")document.getElementById("submitCodeBtn").click();});',
'document.getElementById("agCatFilter").addEventListener("change",function(){',
' var cat=this.value;var subSelect=document.getElementById("agSubFilter");',
' subSelect.innerHTML="All Specialties ";',
' if(cat&&subData[cat]){Object.keys(subData[cat]).forEach(function(s){var opt=document.createElement("option");opt.value=s;opt.textContent=s;subSelect.appendChild(opt);});selectIndustry(cat);}',
'});',
'document.getElementById("agSubFilter").addEventListener("change",function(){if(activeIndustry)selectSub(this.value||null);});',
'document.getElementById("agSortFilter").addEventListener("change",function(){if(activeIndustry)renderTable(activeIndustry,activeSubindustry);});',
'if(agencyUnlocked){',
' document.getElementById("lockIcon").textContent="\\u2713";',
' document.getElementById("lockIcon").classList.add("unlocked");',
' document.getElementById("agencyFilters").classList.add("show");',
' document.getElementById("queryColHead").style.display="table-cell";',
' document.getElementById("codeSection").style.display="none";',
' document.getElementById("agencyHook").style.display="none";',
'}',
'document.querySelectorAll(".faq-q").forEach(function(btn){',
' btn.addEventListener("click",function(){',
' var idx=btn.getAttribute("data-faq");',
' var answer=document.getElementById("faq-a-"+idx);',
' var isOpen=answer.classList.contains("open");',
' document.querySelectorAll(".faq-a").forEach(function(a){a.classList.remove("open");});',
' document.querySelectorAll(".faq-q").forEach(function(q){q.classList.remove("open");});',
' if(!isOpen){answer.classList.add("open");btn.classList.add("open");}',
' });',
'});',
'function fmtDate(d){if(!d)return"N/A";return new Date(d).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"});}',
'function escH(str){return String(str).replace(/&/g,"&").replace(//g,">").replace(/"/g,""");}',
'function showOpportunityPopup(biz,market){var overlay=document.createElement("div");overlay.style.cssText="position:fixed;inset:0;background:rgba(0,0,0,0.6);z-index:9999;display:flex;align-items:center;justify-content:center;padding:20px;";var card=document.createElement("div");card.style.cssText="background:#fff;border-radius:12px;max-width:480px;width:100%;padding:36px 32px;text-align:center;box-shadow:0 20px 60px rgba(0,0,0,0.3);position:relative;";card.innerHTML="Opportunity
"+"Good news. "+biz+" isn\'t ranked in "+market+" yet.
"+"That means there\'s an opening. Run a free audit to see where they stand across ChatGPT, Claude, Gemini, and Perplexity - and get them on the ARO Index.
"+"";overlay.appendChild(card);overlay.addEventListener("click",function(e){if(e.target===overlay)overlay.remove();});document.body.appendChild(overlay);}',
// Default view on page load
(allFilteredBusinesses ? (
// Sub-market: auto-select first industry so page opens organized by category
'(function(){\n' +
' var industries=Object.keys(allData).sort();\n' +
' if(industries.length>0){\n' +
' var first=industries[0];\n' +
' var navItems=document.querySelectorAll(".side-nav-industry");\n' +
' navItems.forEach(function(el){if(el.textContent===first)el.classList.add("active");});\n' +
' selectIndustry(first);\n' +
' } else {\n' +
' var lbSection=document.getElementById("lbSection");\n' +
' var tbody=document.getElementById("lbBody");\n' +
' var title=document.getElementById("lbTitle");\n' +
' if(lbSection&&tbody&&title){\n' +
' lbSection.style.display="block";\n' +
' title.textContent="Top AI Recommended - ' + esc(marketName) + '";\n' +
' tbody.innerHTML="";\n' +
' var emptyRow=document.createElement("tr");\n' +
' var emptyTd=document.createElement("td");\n' +
' emptyTd.colSpan=5;emptyTd.className="empty-state";\n' +
' emptyTd.textContent="No ranked businesses in ' + esc(marketName) + ' yet.";\n' +
' emptyRow.appendChild(emptyTd);tbody.appendChild(emptyRow);\n' +
' }\n' +
' }\n' +
'})();\n'
) : (
// Normal market: show top 5 as preview
'(function(){\n' +
' var all=[];\n' +
' Object.keys(allData).forEach(function(ind){\n' +
' allData[ind].forEach(function(b){all.push(b);});\n' +
' });\n' +
' all.sort(function(a,b){return(b.ranking_score||0)-(a.ranking_score||0);});\n' +
' var top5=all.slice(0,5);\n' +
' if(top5.length>0){\n' +
' var lbSection=document.getElementById("lbSection");\n' +
' var tbody=document.getElementById("lbBody");\n' +
' var title=document.getElementById("lbTitle");\n' +
' if(lbSection&&tbody&&title){\n' +
' lbSection.style.display="block";\n' +
' title.textContent="Top Ranked - All Industries";\n' +
' tbody.innerHTML="";\n' +
' var labelRow=document.createElement("tr");\n' +
' var labelTd=document.createElement("td");\n' +
' labelTd.colSpan=5;labelTd.className="top10-label";\n' +
' labelTd.textContent="Top Ranked - All Industries";\n' +
' labelRow.appendChild(labelTd);tbody.appendChild(labelRow);\n' +
' top5.forEach(function(b){tbody.appendChild(buildRow(b,false,false,""));});\n' +
' }\n' +
' }\n' +
'})();\n'
)) +
'window.selectIndustry=selectIndustry;',
'window.selectSub=selectSub;',
'window.showGlitch=showGlitch;',
'window.hideGlitch=hideGlitch;',
// Auto-select industry from URL param ?industry=
'(function(){',
' var params=new URLSearchParams(window.location.search);',
' var autoInd=params.get("industry");',
' if(autoInd&&allData[autoInd]){',
' selectIndustry(autoInd);',
' setTimeout(function(){document.getElementById("lbSection").scrollIntoView({behavior:"smooth"});},300);',
' }',
'})();',
'})();'
].join('\n');
const css = [
':root{--pink:#E92A97;--teal:#71C9CB;--bg:#0a0a0a;--card:#111111;--card2:#0f0f0f;--border:#222222;--border2:#2a2a2a;--text:#f5f3ef;--muted:#7a7670;--soft:#444440;}',
'*,*::before,*::after{box-sizing:border-box;margin:0;padding:0;}',
'html,body{background:var(--bg);color:var(--text);font-family:"DM Sans",sans-serif;line-height:1.5;min-height:100vh;}',
'#glitch-modal{position:fixed;inset:0;z-index:9999;pointer-events:none;display:flex;align-items:center;justify-content:center;background:rgba(10,10,10,0.85);opacity:0;transition:opacity 0.25s ease;}',
'#glitch-modal.visible{opacity:1;}#glitch-modal.fading{opacity:0;}',
'.glitch-card{width:100%;max-width:100vw;min-height:180px;background:rgba(10,10,10,0.97);border-top:1px solid #2a2a2a;border-bottom:1px solid #2a2a2a;padding:48px 60px;text-align:center;position:relative;overflow:hidden;display:flex;flex-direction:column;align-items:center;justify-content:center;}',
'.glitch-card::before{content:"";position:absolute;inset:0;background:repeating-linear-gradient(0deg,transparent,transparent 3px,rgba(113,201,203,0.03) 3px,rgba(113,201,203,0.03) 4px);pointer-events:none;}',
'.glitch-eyebrow{font-family:"Space Mono",monospace;font-size:10px;text-transform:uppercase;letter-spacing:0.25em;color:var(--teal);margin-bottom:16px;}',
'.glitch-label{font-family:"Cormorant Garamond",serif;font-weight:300;font-size:4rem;color:var(--text);white-space:nowrap;animation:glitch-text-loop 0.8s steps(1) infinite;}',
'.glitch-dots{font-family:"Space Mono",monospace;font-size:12px;color:var(--muted);margin-top:16px;letter-spacing:0.2em;animation:dots-pulse 1.2s ease infinite;}',
'@keyframes glitch-text-loop{0%{text-shadow:none;transform:translateX(0);color:var(--text);}15%{text-shadow:-2px 0 var(--pink),2px 0 var(--teal);transform:translateX(2px);}30%{text-shadow:2px 0 var(--pink),-2px 0 var(--teal);transform:translateX(-1px);}45%{text-shadow:none;transform:translateX(0);}60%{text-shadow:-1px 0 var(--teal);transform:translateX(1px);}75%{text-shadow:none;transform:translateX(0);}90%{text-shadow:1px 0 var(--pink);transform:translateX(-1px);}100%{text-shadow:none;transform:translateX(0);}}',
'@keyframes dots-pulse{0%,100%{opacity:0.4;}50%{opacity:1;}}',
'.topbar{display:flex;align-items:center;justify-content:space-between;padding:20px 40px;border-bottom:1px solid var(--border);flex-wrap:wrap;gap:12px;}',
'.topbar-left{display:flex;align-items:center;gap:16px;}',
'.logo-link img{height:36px;width:auto;display:block;}',
'.topbar-divider{width:1px;height:20px;background:var(--border2);}',
'.topbar-label{font-size:11px;color:var(--muted);line-height:1.6;}',
'.topbar-label strong{display:block;color:var(--text);font-size:14px;font-weight:600;}',
'.topbar-right{font-family:"Space Mono",monospace;font-size:12px;color:var(--soft);letter-spacing:0.08em;}',
'.market-nav{display:flex;gap:12px;flex-wrap:wrap;padding:15px 30px 0;}',
'.market-pill{padding:6px 12px;border-radius:999px;font-size:15px;font-weight:500;text-decoration:none;border:1.5px solid var(--border2);color:var(--muted);background:transparent;transition:all 0.2s;}',
'.market-pill:hover{border-color:var(--text);color:var(--text);}',
'.market-pill.active{background:var(--text);border-color:var(--text);color:var(--bg);}',
'.wrap{width:100%;padding:24px clamp(16px,5vw,64px) 80px;}',
'.hero{padding:28px 0 16px;}',
'.eyebrow{font-family:"Space Mono",monospace;font-size:11px;text-transform:uppercase;letter-spacing:0.18em;color:var(--teal);font-weight:700;margin-bottom:8px;}',
'.hero h1{font-family:"Cormorant Garamond",serif;font-weight:500;font-size:clamp(1.7rem,4.5vw,5rem);line-height:1.05;color:#f5f3ef;margin-bottom:16px;white-space:nowrap;}',
'.hero h1 em{font-style:italic;color:var(--pink);}',
'.hero h2{font-family:"DM Sans",sans-serif;font-weight:700;font-size:1.5rem;line-height:1.3;color:#f0eeea;margin-bottom:20px;max-width:780px;}',
'.hero p{font-size:18px;color:#d8d4ce;max-width:700px;line-height:1.85;margin-bottom:10px;}',
'.hero-fact{font-size:16px;color:#b8b4ae;max-width:560px;line-height:1.7;margin-top:6px;font-family:"Space Mono",monospace;}',
'.stats-bar{display:grid;grid-template-columns:repeat(3,1fr);background:var(--card);border:1px solid var(--border);border-radius:10px;overflow:hidden;margin-bottom:32px;}',
'.stat-cell{padding:22px 28px;border-right:1px solid var(--border);position:relative;cursor:default;}',
'.stat-cell:last-child{border-right:none;}',
'.stat-label{font-family:"Space Mono",monospace;font-size:12px;text-transform:uppercase;letter-spacing:0.12em;color:var(--muted);font-weight:700;margin-bottom:8px;}',
'.stat-value{font-family:"Nunito Sans",sans-serif;font-size:2.4rem;font-weight:800;color:var(--text);margin-bottom:4px;line-height:1;letter-spacing:-0.02em;}',
'.stat-sub{font-size:12px;color:var(--soft);}',
'.stat-tip{position:absolute;bottom:calc(100% + 8px);left:50%;transform:translateX(-50%);background:#1a1a1a;border:1px solid var(--border2);border-radius:8px;padding:10px 14px;font-size:12px;color:var(--muted);max-width:240px;white-space:normal;line-height:1.6;opacity:0;transition:opacity 0.2s;pointer-events:none;z-index:100;}',
'.stat-tip.visible{opacity:1;}',
'.search-wrap{background:var(--card);border:1px solid var(--border);border-radius:10px;padding:16px 24px;margin-bottom:20px;}',
'.search-label{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:0.1em;color:var(--muted);margin-bottom:8px;font-family:"Space Mono",monospace;display:block;}',
'.search-row{display:flex;gap:10px;}',
'.search-input{flex:1;padding:14px 16px;border:1px solid rgba(113,201,203,0.4);border-radius:8px;font-family:"DM Sans",sans-serif;font-size:16px;color:var(--text);background:#2a2a2a;outline:none;transition:border 0.2s,box-shadow 0.2s;}',
'.search-input:focus{border-color:var(--teal);box-shadow:0 0 0 2px rgba(113,201,203,0.25);}',
'.search-input::placeholder{color:#888;font-size:16px;}',
'.search-btn{padding:14px 28px;background:var(--pink);color:#fff;border:none;border-radius:8px;font-weight:700;font-size:15px;cursor:pointer;transition:all 0.2s;}',
'.search-btn:hover{background:#c4157e;color:#fff;}',
'.search-result{margin-top:14px;display:none;}',
'.search-result.show{display:block;}',
'.search-hit{background:var(--card2);border:1px solid var(--teal);border-radius:8px;padding:16px 20px;}',
'.search-miss{background:var(--card2);border:1px solid var(--border2);border-radius:8px;padding:16px 20px;font-size:14px;color:var(--muted);}',
'.section-label{font-family:"Space Mono",monospace;font-size:11px;text-transform:uppercase;letter-spacing:0.18em;color:#f5f3ef;font-weight:700;margin-bottom:14px;}',
'.cmd-select{position:relative;margin-bottom:12px;}',
'.cmd-select-label{font-family:"Space Mono",monospace;font-size:11px;text-transform:uppercase;letter-spacing:0.18em;color:var(--soft);font-weight:700;margin-bottom:4px;display:block;}',
'.cmd-select-input-wrap{position:relative;display:flex;align-items:center;}',
'.cmd-select-prompt{position:absolute;left:14px;font-family:"Space Mono",monospace;font-size:13px;color:var(--teal);pointer-events:none;z-index:2;}',
'.cmd-select-input{width:100%;background:var(--card2);border:1px solid var(--border2);border-radius:8px;padding:9px 16px 9px 36px;font-family:"Space Mono",monospace;font-size:12px;color:var(--text);outline:none;transition:border-color 0.2s;caret-color:var(--teal);}',
'.cmd-select-input::placeholder{color:var(--soft);font-family:"Space Mono",monospace;}',
'.cmd-select-input:focus{border-color:var(--teal);}',
'.cmd-select-active{display:none;position:absolute;right:10px;top:50%;transform:translateY(-50%);background:rgba(113,201,203,0.15);color:var(--teal);font-family:"Space Mono",monospace;font-size:11px;font-weight:700;padding:3px 8px;border-radius:4px;cursor:pointer;border:1px solid rgba(113,201,203,0.3);z-index:2;gap:6px;align-items:center;letter-spacing:0.04em;}',
'.cmd-select-active.show{display:inline-flex;}',
'.cmd-select-active:hover{background:rgba(113,201,203,0.25);}',
'.cmd-select-x{opacity:0.6;margin-left:4px;font-size:13px;}',
'.cmd-dropdown{display:none;position:absolute;top:calc(100% + 4px);left:0;right:0;background:var(--card2);border:1px solid var(--border2);border-radius:8px;max-height:260px;overflow-y:auto;z-index:100;box-shadow:0 8px 32px rgba(0,0,0,0.6);}',
'.cmd-dropdown.open{display:block;}',
'.cmd-dropdown-item{padding:9px 16px;font-family:"DM Sans",sans-serif;font-size:14px;color:rgba(245,243,239,0.7);cursor:pointer;display:flex;align-items:center;justify-content:space-between;transition:background 0.1s;border-bottom:1px solid rgba(255,255,255,0.03);}',
'.cmd-dropdown-item:last-child{border-bottom:none;}',
'.cmd-dropdown-item:hover,.cmd-dropdown-item.hl{background:rgba(245,243,239,0.06);color:var(--text);}',
'.cmd-dropdown-count{font-family:"Space Mono",monospace;font-size:12px;color:var(--soft);}',
'.cmd-dropdown-item:hover .cmd-dropdown-count,.cmd-dropdown-item.hl .cmd-dropdown-count{color:var(--teal);}',
'.cmd-dropdown-empty{padding:14px 16px;font-size:13px;color:var(--soft);text-align:center;font-family:"Space Mono",monospace;}',
'.cmd-dropdown::-webkit-scrollbar{width:6px;}',
'.cmd-dropdown::-webkit-scrollbar-track{background:transparent;}',
'.cmd-dropdown::-webkit-scrollbar-thumb{background:var(--border2);border-radius:3px;}',
'.pills-wrap{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:12px;}',
'.pill.sub{font-size:12px;padding:6px 16px;border-radius:999px;cursor:pointer;border:1px solid rgba(245,243,239,0.2);color:rgba(245,243,239,0.5);background:transparent;transition:all 0.18s;font-weight:400;}',
'.pill.sub:hover{border-color:rgba(245,243,239,0.7);color:#f5f3ef;}',
'.pill.sub.active{background:rgba(113,201,203,0.2);border:1px solid #71C9CB;color:#71C9CB;font-weight:600;box-shadow:0 0 8px rgba(113,201,203,0.3);}',
'.lb-section{background:#151515;border:1px solid rgba(113,201,203,0.12);border-radius:12px;overflow:hidden;margin-bottom:20px;display:none;box-shadow:0 0 40px rgba(113,201,203,0.04),0 2px 20px rgba(0,0,0,0.4);}',
'.lb-header{padding:24px 28px 0;}',
'.lb-micro{font-family:"Space Mono",monospace;font-size:10px;text-transform:uppercase;letter-spacing:0.2em;color:var(--teal);font-weight:700;margin-bottom:6px;opacity:0.7;}',
'.lb-header h2{font-family:"Cormorant Garamond",serif;font-weight:300;font-size:1.8rem;margin-bottom:6px;color:var(--text);}',
'.lb-header .sub{font-size:13px;color:var(--muted);margin-bottom:18px;}',
'.lb-wrap{overflow-x:auto;}',
'table{width:100%;border-collapse:collapse;}',
'thead th{background:#0e0e0e;padding:9px 18px;font-size:10px;text-transform:uppercase;letter-spacing:0.14em;color:#555;font-weight:700;border-bottom:1px solid #1a1a1a;text-align:left;white-space:nowrap;font-family:"Space Mono",monospace;}',
'tbody td{padding:14px 18px;border-bottom:1px solid #1a1a1a;font-size:15px;vertical-align:middle;color:#e8e4de;transition:background 0.15s,box-shadow 0.15s;}',
'tbody tr:last-child td{border-bottom:none;}',
'tbody tr:hover td{background:rgba(113,201,203,0.03);}',
'tbody tr:hover td:first-child{box-shadow:inset 3px 0 0 var(--teal);}',
'tbody tr:hover .index-pill{box-shadow:0 0 12px rgba(113,201,203,0.3);}',
'tbody tr.highlighted td{background:rgba(233,42,151,0.06);border-left:2px solid var(--pink);}',
'tbody tr.rank-one-row td{background:rgba(113,201,203,0.04);}',
// ── Table data cells ──
'.biz-name{font-family:"Nunito Sans",sans-serif;font-weight:800;color:#fff;display:block;font-size:17px;letter-spacing:-0.01em;}',
'.biz-domain{font-family:"Space Mono",monospace;font-size:11px;color:#555;display:block;margin-top:3px;font-weight:400;letter-spacing:0.02em;}',
'.index-pill{display:inline-flex;align-items:center;justify-content:center;background:rgba(113,201,203,0.12);color:var(--teal);border-radius:6px;padding:7px 16px;font-family:"Nunito Sans",sans-serif;font-size:1.6rem;font-weight:900;min-width:64px;border:1px solid rgba(113,201,203,0.25);transition:box-shadow 0.15s;letter-spacing:-0.02em;}',
'.aro-score{font-family:"Nunito Sans",sans-serif;font-size:13px;color:#666;font-weight:700;}',
'.models-val{font-family:"Nunito Sans",sans-serif;font-size:14px;color:#666;font-weight:700;}',
'.models-val.full{color:var(--teal);font-weight:800;}',
// ──────────────────────────────────────────────────
'.date-cell{font-family:"Space Mono",monospace;font-size:12px;color:var(--soft);}',
'.query-live{font-family:"Space Mono",monospace;font-size:12px;color:var(--teal);}',
'.top10-label{font-family:"Space Mono",monospace;font-size:10px;text-transform:uppercase;letter-spacing:0.16em;color:#555;font-weight:700;padding:8px 18px;background:#0e0e0e;border-bottom:1px solid #1a1a1a;}',
'.outside-label{font-family:"Space Mono",monospace;font-size:10px;text-transform:uppercase;letter-spacing:0.16em;color:var(--pink);font-weight:700;padding:8px 18px;background:rgba(233,42,151,0.03);border-top:1px solid rgba(233,42,151,0.15);}',
'.empty-state{padding:48px 28px;text-align:center;color:var(--muted);font-size:14px;}',
'.empty-state a{color:var(--pink);text-decoration:none;font-weight:600;}',
'.gate-wrap{padding:0;}',
'.gate-inner{background:#aababa;border-radius:0;padding:14px 24px;text-align:center;}',
'.gate-headline{font-family:"DM Sans",sans-serif;font-size:14px;font-weight:600;color:#0D0D0D;margin-bottom:4px;}',
'.gate-sub{font-size:12px;color:#1a1a1a;margin-bottom:0;line-height:1.5;}',
'.gate-note{font-size:10px;color:#333;display:block;margin-top:2px;}',
'.gate-input{width:180px;padding:7px 12px;border:1px solid #888;border-radius:6px;font-size:13px;font-family:"DM Sans",sans-serif;margin:8px 6px 0 0;display:inline-block;outline:none;background:#fff;color:#0D0D0D;}',
'.gate-input:focus{border-color:var(--pink);}',
'.gate-input::placeholder{color:#999;}',
'.gate-btns{display:inline-flex;gap:6px;vertical-align:top;margin-top:8px;}',
'.gate-btn{padding:7px 14px;border-radius:6px;font-size:12px;font-weight:700;cursor:pointer;border:none;font-family:"DM Sans",sans-serif;transition:opacity 0.15s;}',
'.gate-btn:disabled{opacity:0.5;cursor:default;}',
'.gate-btn-owner{background:#0D0D0D;color:#f5f3ef;}',
'.gate-btn-agency{background:var(--pink);color:#fff;}',
'.gate-error{color:#c4157e;font-size:11px;margin-top:4px;min-height:14px;}',
'.row-audit-btn{display:inline-block;padding:7px 16px;background:var(--teal);border:none;color:#0a0a0a;border-radius:5px;font-size:11px;font-weight:700;text-decoration:none;white-space:nowrap;transition:all 0.18s;font-family:"DM Sans",sans-serif;letter-spacing:0.04em;text-transform:uppercase;}',
'.row-audit-btn:hover{background:#50b5b7;transform:translateY(-1px);}',
'.badge-prompt{margin-top:8px;padding-top:8px;border-top:1px solid #1a1a1a;}',
'.badge-q{font-size:11px;font-weight:400;color:#555;font-family:"Space Mono",monospace;}',
'.badge-actions{display:flex;gap:12px;margin-top:4px;}',
'.badge-yes{padding:0;background:none;border:none;color:#555;font-size:11px;font-weight:400;cursor:pointer;font-family:"Space Mono",monospace;transition:color 0.15s;text-decoration:underline;text-underline-offset:2px;}',
'.badge-yes:hover{color:var(--teal);}',
'.badge-no{padding:0;background:none;border:none;color:var(--teal);font-size:11px;font-weight:600;cursor:pointer;font-family:"Space Mono",monospace;transition:color 0.15s;text-decoration:underline;text-underline-offset:2px;}',
'.badge-no:hover{color:#50b5b7;}',
'.badge-email-form{display:flex;gap:8px;flex-wrap:wrap;}',
'.badge-input{flex:1;min-width:160px;padding:6px 12px;border:1px solid var(--border2);border-radius:6px;font-size:13px;color:var(--text);background:var(--bg);outline:none;font-family:"DM Sans",sans-serif;}',
'.badge-input:focus{border-color:var(--teal);}',
'.badge-submit{padding:6px 14px;background:var(--pink);border:none;color:#fff;border-radius:6px;font-size:12px;font-weight:700;cursor:pointer;font-family:"DM Sans",sans-serif;transition:background 0.18s;}',
'.badge-submit:hover{background:#c4157e;}',
'.how-one-liner{padding:16px 20px;background:rgba(113,201,203,0.05);border:1px solid rgba(113,201,203,0.15);border-radius:8px;font-size:13px;color:var(--muted);line-height:1.7;margin-bottom:28px;}',
'.how-one-liner strong{color:var(--teal);}',
'.agency-hook{display:none;border-radius:12px;padding:36px 40px;margin-bottom:20px;position:relative;overflow:hidden;background:linear-gradient(135deg,rgba(233,42,151,0.08) 0%,rgba(113,201,203,0.08) 100%);border:1px solid rgba(233,42,151,0.3);box-shadow:0 0 40px rgba(233,42,151,0.1),0 0 80px rgba(113,201,203,0.05);}',
'.agency-hook::before{content:"";position:absolute;top:0;left:0;right:0;height:2px;background:linear-gradient(90deg,var(--pink),var(--teal));}',
'.agency-hook-eyebrow{font-family:"Space Mono",monospace;font-size:12px;text-transform:uppercase;letter-spacing:0.18em;color:var(--pink);font-weight:700;margin-bottom:14px;}',
'.agency-hook h3{font-family:"Cormorant Garamond",serif;font-weight:400;font-size:2rem;color:#f5f3ef;margin-bottom:16px;line-height:1.2;}',
'.agency-hook .hook-body{font-size:15px;color:#d0ccc6;line-height:1.85;margin-bottom:20px;max-width:680px;}',
'.agency-hook .hook-list{list-style:none;padding:0;margin:0 0 24px;font-size:15px;color:#d0ccc6;line-height:2;}',
'.agency-hook .hook-list li::before{content:"-> ";color:var(--teal);font-weight:700;}',
'.agency-hook-btns{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:16px;}',
'.see-more-toggle{background:none;border:none;color:var(--teal);font-size:12px;font-family:"Space Mono",monospace;cursor:pointer;padding:0;letter-spacing:0.08em;text-decoration:underline;text-underline-offset:3px;}',
'.see-more-body{display:none;margin-top:20px;padding-top:20px;border-top:1px solid rgba(113,201,203,0.15);}',
'.see-more-body.open{display:block;}',
'.see-more-body p{font-size:14px;color:#b8b4ae;line-height:1.8;margin-bottom:12px;}',
'.see-more-body p:last-child{margin-bottom:0;}',
'.cta-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:28px;}',
'.cta-card{background:var(--card);border:1px solid var(--border);border-radius:12px;padding:32px;transition:box-shadow 0.3s;}',
'.cta-card:hover{box-shadow:0 0 30px rgba(113,201,203,0.12);}',
'.cta-card.dark{background:var(--card2);border-color:rgba(233,42,151,0.3);box-shadow:0 0 32px rgba(233,42,151,0.08);}',
'.cta-card.dark:hover{box-shadow:0 0 60px rgba(233,42,151,0.18);}',
'.cta-card h3{font-family:"Cormorant Garamond",serif;font-weight:300;font-size:1.7rem;margin-bottom:10px;color:var(--text);line-height:1.2;}',
'.cta-card p{font-size:13px;color:var(--muted);line-height:1.75;margin-bottom:20px;}',
'.price-tag{font-family:"Nunito Sans",sans-serif;font-weight:900;font-size:2.8rem;color:var(--pink);margin-bottom:4px;line-height:1;text-shadow:0 0 30px rgba(233,42,151,0.4);}',
'.price-note{font-size:12px;color:var(--soft);margin-bottom:18px;}',
'.btn-pink{display:inline-block;text-decoration:none;background:var(--pink);color:#fff;padding:12px 26px;border-radius:8px;font-weight:700;font-size:13px;border:none;cursor:pointer;font-family:"DM Sans",sans-serif;transition:all 0.18s;}',
'.btn-pink:hover{background:#c4157e;transform:translateY(-1px);}',
'.btn-teal{display:inline-block;text-decoration:none;background:var(--teal);color:#0a0a0a;padding:12px 26px;border-radius:8px;font-weight:700;font-size:13px;border:none;cursor:pointer;font-family:"DM Sans",sans-serif;transition:all 0.18s;margin-right:12px;}',
'.btn-teal:hover{background:#50b5b7;transform:translateY(-1px);}',
'.agency-panel{background:var(--card);border:1px solid var(--border);border-radius:12px;overflow:hidden;margin-bottom:28px;}',
'.agency-header{padding:22px 28px;display:flex;align-items:center;justify-content:space-between;cursor:pointer;border-bottom:1px solid transparent;user-select:none;transition:background 0.15s;}',
'.agency-header:hover{background:rgba(255,255,255,0.02);}',
'.agency-header.open{border-bottom-color:var(--border);}',
'.agency-header-left{display:flex;align-items:center;gap:14px;}',
'.lock-icon{font-size:16px;color:var(--muted);transition:color 0.2s;}',
'.lock-icon.unlocked{color:var(--teal);}',
'.agency-title{font-weight:600;font-size:14px;color:var(--text);}',
'.agency-sub{font-size:12px;color:var(--muted);margin-top:2px;}',
'.chevron{color:var(--muted);transition:transform 0.2s;font-size:12px;}',
'.chevron.open{transform:rotate(180deg);}',
'.agency-body{display:none;padding:26px 28px;}',
'.agency-body.open{display:block;}',
'.agency-unlocked-filters{display:none;margin-top:18px;}',
'.agency-unlocked-filters.show{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;}',
'.filter-group label{font-size:12px;text-transform:uppercase;letter-spacing:0.1em;color:var(--muted);font-weight:700;display:block;margin-bottom:8px;font-family:"Space Mono",monospace;}',
'.filter-select{width:100%;padding:9px 12px;border:1px solid var(--border2);border-radius:8px;font-family:"DM Sans",sans-serif;font-size:13px;color:var(--text);background:var(--card2);cursor:pointer;}',
'.code-row{display:flex;gap:10px;}',
'.code-input{flex:1;padding:11px 16px;border:1px solid var(--border2);border-radius:8px;font-family:"Space Mono",monospace;font-size:13px;color:var(--text);background:var(--bg);outline:none;text-transform:uppercase;transition:border 0.2s;}',
'.code-input:focus{border-color:var(--teal);}',
'.code-error{font-size:12px;color:var(--pink);margin-top:8px;display:none;}',
'.code-error.show{display:block;}',
'.faq-section{background:var(--card);border:1px solid var(--border);border-radius:12px;overflow:hidden;margin-bottom:28px;}',
'.faq-header{padding:28px 28px 0;}',
'.faq-header h2{font-family:"Cormorant Garamond",serif;font-weight:300;font-size:1.8rem;margin-bottom:6px;color:var(--text);}',
'.faq-header p{font-size:13px;color:var(--muted);margin-bottom:22px;}',
'.faq-item{border-top:1px solid var(--border);}',
'.faq-q{width:100%;text-align:left;padding:20px 28px;background:none;border:none;font-family:"DM Sans",sans-serif;font-size:15px;font-weight:500;color:var(--text);cursor:pointer;display:flex;justify-content:space-between;align-items:center;gap:12px;transition:background 0.15s;}',
'.faq-q:hover{background:rgba(255,255,255,0.02);}',
'.faq-icon{color:var(--teal);font-size:20px;flex-shrink:0;transition:transform 0.2s;line-height:1;}',
'.faq-q.open .faq-icon{transform:rotate(45deg);}',
'.faq-a{max-height:0;overflow:hidden;transition:max-height 0.35s ease;font-size:14px;color:var(--muted);line-height:1.8;}',
'.faq-a.open{max-height:400px;}',
'.faq-a-inner{padding:0 28px 24px;}',
'footer{border-top:1px solid var(--border);padding:28px 40px;text-align:center;font-size:12px;color:var(--soft);}',
'footer a{color:var(--muted);text-decoration:none;}',
'footer a:hover{color:var(--teal);}',
'.fade-in{animation:fadeIn 0.3s ease forwards;}',
'@keyframes fadeIn{from{opacity:0;transform:translateY(4px);}to{opacity:1;transform:translateY(0);}}',
// Scanline texture for dark sections
'.lb-section::after,.agency-hook::after{content:"";position:absolute;inset:0;background:repeating-linear-gradient(to bottom,rgba(255,255,255,0.02),rgba(255,255,255,0.02) 1px,transparent 1px,transparent 3px);pointer-events:none;opacity:0.5;}',
'.lb-section,.agency-hook{position:relative;}',
// Gradient divider
'.grad-div{height:1px;background:linear-gradient(to right,transparent,rgba(113,201,203,0.6),rgba(233,42,151,0.6),transparent);margin:0;}',
// Row hover lift
'tbody tr{transition:transform 0.18s ease,box-shadow 0.18s ease;}',
'tbody tr:hover{transform:translateY(-1px);box-shadow:0 2px 8px rgba(0,0,0,0.3);}',
'@media(max-width:768px){',
'.topbar{padding:16px 20px;}.market-nav{padding:16px 20px 0;}.wrap{padding:16px 16px 60px;}',
'.cta-grid{grid-template-columns:1fr;}.agency-unlocked-filters.show{grid-template-columns:1fr;}',
'.stats-bar{grid-template-columns:1fr;}',
'.stat-cell{border-right:none;border-bottom:1px solid var(--border);}.stat-cell:last-child{border-bottom:none;}',
'.badge-actions{flex-direction:row;}',
'footer{padding:24px 20px;}',
'.agency-hook{padding:24px 20px;}.agency-hook h3{font-size:1.5rem;}',
'.lb-header{padding:20px 16px 0;}.lb-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch;}',
'thead th,tbody td{padding:12px 10px;font-size:13px;}',
'.search-wrap{padding:16px;}.search-row{flex-direction:column;}.search-input{min-width:unset;font-size:16px;}',
'.search-btn{width:100%;min-height:48px;}',
'.btn-pink,.btn-teal{min-height:48px;width:100%;text-align:center;display:block;}',
'.cmd-select-input{font-size:14px;}',
'.row-audit-btn{min-height:44px;padding:10px 16px;font-size:13px;}',
'}',
'@media(max-width:480px){',
'.hero h1{white-space:normal;font-size:clamp(1.8rem,8vw,3rem);}',
'.topbar-right{display:none;}',
'.market-nav{padding:12px 16px 0;}',
'.hero p,.hero-fact{font-size:14px;}',
'.cmd-dropdown-item{padding:12px 16px;font-size:15px;}',
'}',
// Sidebar
'.page-layout{display:flex;min-height:100vh;}',
'.side-nav{width:220px;flex-shrink:0;position:sticky;top:0;height:100vh;overflow-y:auto;background:var(--bg);border-right:1px solid var(--border);padding:20px 0;z-index:50;}',
'.side-nav-brand{font-family:"Space Mono",monospace;font-size:12px;color:var(--teal);letter-spacing:0.1em;text-transform:uppercase;padding:0 16px 16px;border-bottom:1px solid var(--border);}',
'.side-nav-links{padding:12px 0;border-bottom:1px solid var(--border);}',
'.side-nav-links a{display:block;padding:6px 16px;font-family:"DM Sans",sans-serif;font-size:13px;color:#aababa;text-decoration:none;transition:color 0.15s;}',
'.side-nav-links a:hover{color:var(--teal);}',
'.side-nav-links a.active{color:var(--teal);}',
'.side-nav-section{padding:12px 16px 4px;font-family:"Space Mono",monospace;font-size:12px;text-transform:uppercase;letter-spacing:0.1em;color:#f5f3ef;font-weight:700;}',
'.side-nav-market{display:block;padding:7px 16px;font-family:"DM Sans",sans-serif;font-size:14px;color:#aababa;text-decoration:none;border-left:3px solid transparent;transition:all 0.15s;}',
'.side-nav-market:hover{color:#f5f3ef;background:rgba(255,255,255,0.02);}',
'.side-nav-market.active{color:#fff;border-left-color:var(--pink);background:rgba(233,42,151,0.06);}',
'.side-nav-industry{display:block;padding:5px 16px;font-family:"DM Sans",sans-serif;font-size:13px;color:#aababa;text-decoration:none;cursor:pointer;transition:all 0.15s;}',
'.side-nav-industry:hover{color:#f5f3ef;}',
'.side-nav-industry.active{color:#71C9CB;font-weight:700;font-size:18px;padding:8px 16px;}',
'.side-nav-sub{display:block;padding:4px 16px 4px 32px;font-family:"DM Sans",sans-serif;font-size:0.85em;color:rgba(170,186,186,0.6);text-decoration:none;cursor:pointer;transition:color 0.15s;border-left:2px solid rgba(113,201,203,0.15);}',
'.side-nav-sub:hover{color:#f5f3ef;}',
'.side-nav-sub.active{color:#71C9CB;font-weight:600;border-left-color:#71C9CB;}',
'.page-main{flex:1;min-width:0;}',
// Mobile hamburger for sidebar
'.mobile-menu-btn{display:none;background:none;border:none;cursor:pointer;font-family:"Space Mono",monospace;font-size:12px;color:var(--teal);letter-spacing:0.08em;align-items:center;gap:8px;padding:8px 16px;}',
'#mobile-nav-overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,0.5);z-index:998;}',
'@media(max-width:768px){',
'.side-nav{display:none;position:fixed;top:0;left:-220px;height:100vh;z-index:999;transition:left 0.25s ease;}',
'.side-nav.open{display:block;left:0;}',
'.mobile-menu-btn{display:flex;}',
'.page-layout{display:block;}',
'}'
].join('');
return '\n\n\n' +
' \n' +
' \n' +
'ARO Index - ' + esc(marketName) + ' | TaG Makes \n' +
' \n' +
' \n' +
' \n' +
' \n' +
' \n' +
' \n' +
' \n' +
// Nunito Sans weight 400/700/800/900 loaded
' \n' +
'\n' +
'\n' +
'\n' +
'\n' +
'\n' +
'\n' +
'\n' +
'\n' +
'\n' +
'\n\n' +
'ARO Index
Loading
analyzing . . .
\n' +
'
\n' +
'\n' +
// Sidebar
'
\n' +
'ARO Index™
\n' +
'\n' +
'Markets
\n' +
marketPills.replace(/class="market-pill[^"]*"/g, function(match) {
return match.replace('market-pill', 'side-nav-market');
}) + '\n' +
'Industries
\n' +
'
\n' +
' \n' +
// Main content
'
\n' +
'
\n' +
'
\n' +
'
\n' +
'
Updated from live AI queries
\n' +
'
AI already decided who gets the customer. \n' +
'
Live data showing which businesses AI selects in ' + esc(marketName) + '.
\n' +
'
\n' +
// Sub-market nav (only if sub-markets exist)
(subMarkets.length > 0 ? (
'
' +
'
All ' + esc(parentMarketName) + ' ' +
subMarkets.map(function(sm) {
const smName = sm.split('-').map(function(w) { return w.charAt(0).toUpperCase() + w.slice(1); }).join(' ');
const isActive = sm === areaParam;
return '
' + esc(smName) + ' ';
}).join('') +
'
\n'
) : '') +
'
\n' +
'
Search for your business \n' +
'
Search
\n' +
'
\n' +
'
\n' +
'
\n' +
'
Browse by industry \n' +
'
\n' +
'>_ \n' +
' \n' +
'× \n' +
'
\n' +
'
\n' +
'
\n' +
'
' +
'
Filter by specialty
' +
'
' +
'
\n' +
'
\n' +
'
\n' +
'\n' +
'
\n' +
'' +
'Business ' +
'Index Score ' +
'ARO Score ' +
'AIs Agree ' +
'Get Started ' +
'Query Tested ' +
' \n' +
'Select an industry above to see rankings. \n' +
'
\n' +
'
\n' +
'
' +
'How scores work: We ask ChatGPT, Claude, Gemini, and Perplexity who they recommend, then score every business on how clearly and consistently they showed up.' +
'
\n' +
// REFRAME BLOCK (moved below leaderboard)
'
\n' +
'
Most businesses aren\'t losing because they\'re worse. They\'re losing because AI understands someone else better.
\n' +
'
\n' +
// PROOF BLOCK (dynamic, updated when industry/sub changes)
'
\n' +
'
\n' +
'
For agencies
\n' +
'
Agencies: your clients are already being evaluated by AI. \n' +
'
Clients are starting to see competitors show up in AI results first. Now you can show them why and fix it before they look elsewhere.
\n' +
'
\n' +
'
White-label ready. Track your entire client portfolio.
\n' +
'
\n' +
// POST-LEADERBOARD CONVERSION
'
\n' +
'
Not seeing your business? \n' +
'
AI is already recommending a competitor instead.
\n' +
'
' +
'
→ Who AI believes your customers are
' +
'
→ Which customers you\'re not getting
' +
'
→ Why AI chooses someone else first
' +
'
\n' +
'
\n' +
'
\n' +
// AUTHORITY CLOSE
'
\n' +
'
The difference isn\'t marketing. It\'s whether AI can confidently match you to the right customer.
\n' +
'
That\'s what this measures. That\'s what this fixes.
\n' +
'
\n' +
'
\n' +
'\n' +
'
\n' +
'
\n' +
'
Enter your agency access code to unlock category filters, query data, and full audit detail.
\n' +
'
Unlock
\n' +
'
Invalid access code. Contact Therese at therese@tagmakessc.com to get set up.
\n' +
'
No code? Learn about agency partnerships
\n' +
'
\n' +
'
\n' +
'
Category All Categories ' + agencyCatOptions + '
\n' +
'
Subindustry All Specialties
\n' +
'
Sort By Index Score ARO Score Most Recent
\n' +
'
\n' +
'
\n' +
'
\n' +
// STATS BAR — always visible, above FAQ, below all content
'
\n' +
'
' +
'
' + totalBusinesses.toLocaleString() + '
' +
'
Businesses tracked
\n' +
'
' +
'
' + (auditCount > 0 ? auditCount.toLocaleString() : '0') + '
' +
'
Audits run
\n' +
'
' +
'
4
' +
'
AI platforms tested
\n' +
'
' +
'
16%
' +
'
get zero recommendations
' +
'
Businesses with 0 out of 4 model recommendations.
\n' +
'
\n' +
'
\n' +
'\n' +
faqHtml +
'
\n' +
'
\n' +
'
\n' +
'\n' +
'\n' +
// Sidebar industry population
'\n' +
// Glitch transition on sidebar market links
'\n' +
'
\n
\n' + // close page-main and page-layout
'\n';
}